package vistas;

import helper.DateStringConverter;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;

import modelo.Periodo;
import modelo.vista.TemporadaItemView;

import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.swingbinding.JTableBinding;
import org.jdesktop.swingbinding.SwingBindings;

import controladores.AdministrateCosechasControlador;
import controladores.AdministratePropietarioControlador;

public class AdministrateCosechaVista extends JPanel implements AbstractVista<AdministrateCosechasControlador> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	protected AdministrateCosechasControlador controlador;
	private AdministratePropietarioControlador controladorPropietario;
	private JTextField txtCereal;
	private JTextField txtFechaFin;
	private JTextField txtFechaInicio;
	private JTable tableTemporadasItems;

	public AdministrateCosechaVista() {
		super();
		initComponents();
	}


	public AdministrateCosechaVista(AdministrateCosechasControlador controlador, AdministratePropietarioControlador administratePropietariosControlador) {
		super();
		this.controlador = controlador;
		this.setControladorPropietario(administratePropietariosControlador);
		initComponents();
	}

	public AdministrateCosechasControlador getControlador() {
		return controlador;
	}

	public void setControlador(AdministrateCosechasControlador controlador) {
		this.controlador = controlador;
	}
	
	public AdministratePropietarioControlador getControladorPropietario() {
		return controladorPropietario;
	}
	
	
	public void setControladorPropietario(AdministratePropietarioControlador controladorPropietario) {
		this.controladorPropietario = controladorPropietario;
	}

	
	private void initComponents() {
		
		this.setLayout(null);
		this.setPreferredSize(new Dimension(790, 440));
		
		JLabel lblCereal = new JLabel("Cereal:");
		lblCereal.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
		lblCereal.setBounds(468, 330, 95, 14);
		add(lblCereal);
		
		txtCereal = new JTextField();
		txtCereal.setBounds(574, 327, 156, 20);
		add(txtCereal);
		txtCereal.setColumns(10);
		
		JLabel lblPeriodo = new JLabel("Per\u00EDodo (mm/aaaa)");
		lblPeriodo.setFont(new Font("Lucida Grande", Font.PLAIN, 18));
		lblPeriodo.setBounds(183, 291, 172, 25);
		add(lblPeriodo);
		
		txtFechaFin = new JTextField();
		txtFechaFin.setBounds(357, 328, 86, 20);
		add(txtFechaFin);
		txtFechaFin.setColumns(10);
		
		txtFechaInicio = new JTextField();
		txtFechaInicio.setBounds(148, 328, 86, 20);
		add(txtFechaInicio);
		txtFechaInicio.setColumns(10);
		
		JLabel lblFechaInicio = new JLabel("Fecha inicio:");
		lblFechaInicio.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
		lblFechaInicio.setBounds(31, 328, 95, 20);
		add(lblFechaInicio);
		
		JLabel lblFechaFin = new JLabel("Fecha fin:");
		lblFechaFin.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
		lblFechaFin.setBounds(246, 331, 86, 14);
		add(lblFechaFin);
		this.setPreferredSize(new java.awt.Dimension(754, 443));
		
		tableTemporadasItems = new JTable();
		tableTemporadasItems.setBounds(31, 47, 699, 232);
		add(tableTemporadasItems);
		
		final JButton btnBuscarLotesSembrados = new JButton("Buscar lotes sembrados");
		btnBuscarLotesSembrados.setFont(new Font("Tahoma", Font.PLAIN, 14));
		final JButton btnConfirmarCosechas = new JButton("Guardar cosechas");
		btnConfirmarCosechas.setFont(new Font("Tahoma", Font.PLAIN, 14));
		
		btnBuscarLotesSembrados.setVisible(true);
		btnBuscarLotesSembrados.setBounds(260, 375, 200, 45);
		add(btnBuscarLotesSembrados);
		btnBuscarLotesSembrados.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(txtFechaFin.getText().equals("") || txtFechaFin.getText().equals("") || txtCereal.getText().equals("")){
					
				}else{
					String fechaInicio = txtFechaInicio.getText();
					String fechaFin = txtFechaFin.getText();
					DateStringConverter dsc = new DateStringConverter();
					Date inicio = dsc.convertReverse(fechaInicio);
					Date fin = dsc.convertReverse(fechaFin);
					controlador.agregarCosechasDePropietario(controladorPropietario.getPropietarioLogueado().getDni(), txtCereal.getText(), new Periodo(inicio, fin));
					btnBuscarLotesSembrados.setVisible(false);
					btnConfirmarCosechas.setVisible(true);
				}
			}
		});
		
		btnConfirmarCosechas.setVisible(false);
		btnConfirmarCosechas.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				controlador.confirmarCosechasModificadas(controladorPropietario.getPropietarioLogueado().getDni());
				btnConfirmarCosechas.setVisible(false);
				btnBuscarLotesSembrados.setVisible(true);
			}
		});
		btnConfirmarCosechas.setBounds(260, 375, 200, 45);
		add(btnConfirmarCosechas);
		initDataBindings();
		
		
	}
	protected void initDataBindings() {
		BeanProperty<AdministrateCosechasControlador, List<TemporadaItemView>> administrateCosechasControladorBeanProperty = BeanProperty.create("temporadasItemView");
		JTableBinding<TemporadaItemView, AdministrateCosechasControlador, JTable> jTableBinding = SwingBindings.createJTableBinding(UpdateStrategy.READ_WRITE, controlador, administrateCosechasControladorBeanProperty, tableTemporadasItems, "jTableBinding");
		//
		BeanProperty<TemporadaItemView, Integer> temporadaItemViewBeanProperty = BeanProperty.create("lote.nroLote");
		jTableBinding.addColumnBinding(temporadaItemViewBeanProperty).setColumnName("NumeroLote");
		//
		BeanProperty<TemporadaItemView, Float> temporadaItemViewBeanProperty_1 = BeanProperty.create("cantidadSembrado");
		jTableBinding.addColumnBinding(temporadaItemViewBeanProperty_1).setColumnName("CantidadSembrado");
		//
		BeanProperty<TemporadaItemView, Float> temporadaItemViewBeanProperty_2 = BeanProperty.create("cantidadCosechado");
		jTableBinding.addColumnBinding(temporadaItemViewBeanProperty_2).setColumnName("CantidadCosechado");
		//
		jTableBinding.bind();
	}
}
